// 日期补0
const formatNumber = n => {
	n = n.toString()
	return n[1] ? n : '0' + n
}

// 银行卡号中间处理成****
const cardStar = (num) =>{
	// let tel = '13600136000';
	return String(num).replace(/(\d{4})\d+(\d{4})/,"$1****$2");
}

// 更新数组年月份日期
function getfullDateStr(dayCount = 0, date = '', word = false, datestring = "-") {
	var dd = !date?new Date():new Date(date);
	dd.setDate(dd.getDate() + dayCount); //设置日期
	const year = dd.getFullYear()
	const month = dd.getMonth() + 1
	const day = dd.getDate()
	if (!word) {
		return [year, month, day].map(formatNumber).join(datestring)
	}
	return [year].map(formatNumber) + '年' + [month].map(formatNumber) + '月' + [day].map(formatNumber) + '日'
}


//计算两个日期差
function daysBetween(sDate1, sDate2) {
	//Date.parse() 解析一个日期时间字符串，并返回1970/1/1 午夜距离该日期时间的毫秒数
	var time1 = (new Date(sDate1)).getTime();
	var time2 = (new Date(sDate2)).getTime();
	var nDays = parseInt((time2 - time1) / 1000 / 3600 / 24);
	return nDays;
};


// 更新数组月份日期
function getDateStr(dayCount = 0) {
	var dd = new Date();
	dd.setDate(dd.getDate() + dayCount); //设置日期
	var y = dd.getFullYear(); //获取当前月份的日期
	var m = dd.getMonth() + 1; //获取当前月份的日期
	var d = dd.getDate();
	return `${y}.${m<10?'0'+m:m}.${d<10?'0'+d:d}`
}

//更新数组星期
function getWeekDateStr(dayCount = 0) {
	//更新数组星期
	var weekStr = "周" + "日一二三四五六".charAt((new Date().getDay() + dayCount) % 7);
	return weekStr;
}


//手机号是否合法 
function isPhone(val) {
	const regexp = /^1\d{10}$/;
	return regexp.test(val)
}

// 检验密码 8-16位数字 字母组合
function isPwd(val){
	const regexp =  /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,16}$/;
	return regexp.test(val)
}

// 邮箱
function isMail(val){
	const regexp =  /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
	return regexp.test(val)
}


//银行卡是否合法 
function isIDcard(value) {
	if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(value)) {
		return true
	}
}

/**
 * 处理富文本里的图片宽度自适应
 * 1.去掉img标签里的style、width、height属性
 * 2.img标签添加style属性：max-width:100%;height:auto
 * 3.修改所有style里的width属性为max-width:100%
 * 4.去掉<br/>标签
 * @param html
 * @returns {void|string|*}
 */
function formatRichText(html) {
	let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
		match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
		match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
		match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
		return match;
	});
	newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
		match = match.replace(/width:[^;]+;/gi, 'width:100%;').replace(/width:[^;]+;/gi, 'width:100%;');
		return match;
	});
	newContent = newContent.replace(/<br[^>]*\/>/gi, '');
	newContent = newContent.replace(/\<img/gi,
		'<img style="width:100%;height:auto;display:block;margin-top:0;margin-bottom:0;"');
	return newContent;
};


// 格式化手机号 3-3-4
function formatPhone(val) {
	if (val.length == 11) {
		const matches = /^(\d{3})(\d{4})(\d{4})$/.exec(val)
		if (matches) {
			return matches[1] + '-' + matches[2] + '-' + matches[3]
		}
	} else {
		return val
	}

}
// 处理数字小数点前后样式不一
const pointsPrice = (val, num = 0) => {
	val = val / 1
	return val.toFixed(2).split('.')[num]
}

// 获取昨天日期
const getyesterday = () => {
	let timenow = new Date();
	timenow.setDate(timenow.getDate() - 1); // 设置天数 -1 天，昨天的日期
	let y = timenow.getFullYear(); // 年
	let m = timenow.getMonth() + 1; // 月
	m = m < 10 ? '0' + m : m;
	let d = timenow.getDate(); // 日
	d = d < 10 ? ('0' + d) : d;
	let yesterdayTime = y + '-' + m + '-' + d; // 字符串拼接成自己想要的时间格式，现在是 yyyy/mm/dd 格式
	return yesterdayTime;
}

// 手机号中间处理成****
const phoneStar = (tel) =>{
	// let tel = '13600136000';
	return tel.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
}

// 获取当前周所有日期
function getWeekDataList(data) {
	//根据日期获取本周周一~周日的年-月-日
	var weekList = [];
	var date = new Date(data);
	//判断本日期是否为周日，获取本周一日期
	if(date.getDay()=="0"){
		date.setDate(date.getDate() -6);
	}else {
		date.setDate(date.getDate() - date.getDay() + 1);
	}
	var myDate=date.getDate();
	var myMonth=date.getMonth() + 1;
	if(date.getDate()<10){
		myDate= '0'+ myDate;
	}
	if(date.getMonth() + 1<10){
		myMonth='0'+myMonth;
	}
	weekList.push(date.getFullYear() + "-" + myMonth+ "-" + myDate);
	// 获取周二以后日期
	for(var i=0;i<6;i++) {
		date.setDate(date.getDate() + 1);
		myDate=date.getDate();
		myMonth=date.getMonth() + 1;
		if(date.getDate()<10){
			myDate= '0'+ myDate;
		}
		if(date.getMonth() + 1<10){
			myMonth='0'+myMonth;
		}
		weekList.push(date.getFullYear() + "-" + myMonth+ "-" +myDate);
	}
	console.log(weekList);
	return weekList
}

/**
 * 获取当月的日期集合(yyyy-MM-dd)
 */
function currentMonthDays() {
    // 获取标准时间
    const date = new Date();
    // 获取当天日期
    const currentDay = date.getDate();
    // 获取当前月份（实际月份需要加1）
    const currentMonth = date.getMonth() + 1 < 10 ? '0' + date.getMonth() + 1 : date.getMonth() + 1;
    // 获取当前年份
    const currentYear = date.getFullYear();
    // 获取当前月有多少天
    const currentMonthDays = new Date(currentYear, currentMonth, 0).getDate();
    // 当前月份所有日期集合
    const currentMonthArr = [];
    for (let day = 1; day <= currentMonthDays; day++) {
        // 截至当前日期为止
        if (day <= currentDay) {
            // 年月日(yyyy-MM-dd)
            let dateItem = currentYear + "-" + currentMonth + "-" + (day < 10 ? '0' + day : day)
            currentMonthArr.push(dateItem)
        }
    }
    return currentMonthArr;
}


// 根据出生日期获取年龄 不是时间戳
const getAge = (data) =>{
	var birthday=new Date(data.replace(/-/g, "\/"));
	var d=new Date(); 
	return d.getFullYear()-birthday.getFullYear()-((d.getMonth()<birthday.getMonth()|| d.getMonth()==birthday.getMonth() && d.getDate()<birthday.getDate())?1:0);
}


// 使用正则表达式将数字转换为带有千分位的字符串
function formatCurrency(num) {
    return String(num).replace(/\B(?=(\d{3})+(?!\d))/g, ',');;
}





export{
	daysBetween, //计算两个日期差
	isPhone, //判断手机号是否合法
	isIDcard, //身份证号验证
	formatRichText, //富文本解析
	formatNumber, //日期补0
	getDateStr, //获取距今天几天后的月日
	getWeekDateStr, //获取距今天几天后的星期几
	getfullDateStr, ////获取距今天几天后格式化的年月日
	formatPhone,
	pointsPrice,
	getyesterday,
	phoneStar,
	getWeekDataList,
	currentMonthDays,
	getAge,
	isPwd,
	isMail,
	formatCurrency,
	cardStar
}
